<!DOCTYPE html>
<html lang="en-us">
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    
<meta charset="UTF-8">
<title>Multi Search API | Elasticsearch Guide [7.7] | Elastic</title>
<link rel="home" href="index.html" title="Elasticsearch Guide [7.7]">
<link rel="up" href="search.html" title="Search APIs">
<link rel="prev" href="search-suggesters.html" title="Suggesters">
<link rel="next" href="search-count.html" title="Count API">
<meta name="DC.type" content="Learn/Docs/Elasticsearch/Reference/7.7">
<meta name="DC.subject" content="Elasticsearch">
<meta name="DC.identifier" content="7.7">
<meta name="robots" content="noindex,nofollow">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.optimizely.com/js/18132920325.js"></script>
    <link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
    <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
    <link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
    <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
    <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
    <link rel="manifest" href="/manifest.json">
    <meta name="apple-mobile-web-app-title" content="Elastic">
    <meta name="application-name" content="Elastic">
    <meta name="msapplication-TileColor" content="#ffffff">
    <meta name="msapplication-TileImage" content="/mstile-144x144.png">
    <meta name="theme-color" content="#ffffff">
    <meta name="naver-site-verification" content="936882c1853b701b3cef3721758d80535413dbfd">
    <meta name="yandex-verification" content="d8a47e95d0972434">
    <meta name="localized" content="true">
    <meta name="st:robots" content="follow,index">
    <meta property="og:image" content="https://www.elastic.co/static/images/elastic-logo-200.png">
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <link rel="icon" href="/favicon.ico" type="image/x-icon">
    <link rel="apple-touch-icon-precomposed" sizes="64x64" href="/favicon_64x64_16bit.png">
    <link rel="apple-touch-icon-precomposed" sizes="32x32" href="/favicon_32x32.png">
    <link rel="apple-touch-icon-precomposed" sizes="16x16" href="/favicon_16x16.png">
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <link rel="stylesheet" type="text/css" href="/guide/static/styles.css">
  </head>

  <!--© 2015-2021 Elasticsearch B.V. Copying, publishing and/or distributing without written permission is strictly prohibited.-->

  <body>
    <!-- Google Tag Manager -->
    <script>dataLayer = [];</script><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-58RLH5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-58RLH5');</script>
    <!-- End Google Tag Manager -->

    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-12395217-16"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'UA-12395217-16');
    </script>

    <!--BEGIN QUALTRICS WEBSITE FEEDBACK SNIPPET-->
    <script type="text/javascript">
      (function(){var g=function(e,h,f,g){
      this.get=function(a){for(var a=a+"=",c=document.cookie.split(";"),b=0,e=c.length;b<e;b++){for(var d=c[b];" "==d.charAt(0);)d=d.substring(1,d.length);if(0==d.indexOf(a))return d.substring(a.length,d.length)}return null};
      this.set=function(a,c){var b="",b=new Date;b.setTime(b.getTime()+6048E5);b="; expires="+b.toGMTString();document.cookie=a+"="+c+b+"; path=/; "};
      this.check=function(){var a=this.get(f);if(a)a=a.split(":");else if(100!=e)"v"==h&&(e=Math.random()>=e/100?0:100),a=[h,e,0],this.set(f,a.join(":"));else return!0;var c=a[1];if(100==c)return!0;switch(a[0]){case "v":return!1;case "r":return c=a[2]%Math.floor(100/c),a[2]++,this.set(f,a.join(":")),!c}return!0};
      this.go=function(){if(this.check()){var a=document.createElement("script");a.type="text/javascript";a.src=g;document.body&&document.body.appendChild(a)}};
      this.start=function(){var a=this;window.addEventListener?window.addEventListener("load",function(){a.go()},!1):window.attachEvent&&window.attachEvent("onload",function(){a.go()})}};
      try{(new g(100,"r","QSI_S_ZN_emkP0oSe9Qrn7kF","https://znemkp0ose9qrn7kf-elastic.siteintercept.qualtrics.com/WRSiteInterceptEngine/?Q_ZID=ZN_emkP0oSe9Qrn7kF")).start()}catch(i){}})();
    </script><div id="ZN_emkP0oSe9Qrn7kF"><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>
    <!--END WEBSITE FEEDBACK SNIPPET-->

    <div id="elastic-nav" style="display:none;"></div>
    <script src="https://www.elastic.co/elastic-nav.js"></script>

    <!-- Subnav -->
    <div>
      <div>
        <div class="tertiary-nav d-none d-md-block">
          <div class="container">
            <div class="p-t-b-15 d-flex justify-content-between nav-container">
              <div class="breadcrum-wrapper"><span><a href="/guide/" style="font-size: 14px; font-weight: 600; color: #000;">Docs</a></span></div>
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="main-container">
      <section id="content">
        <div class="content-wrapper">

          <section id="guide" lang="en">
            <div class="container">
              <div class="row">
                <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                  <!-- start body -->
                  <div class="page_header">
<strong>IMPORTANT</strong>: No additional bug fixes or documentation updates
will be released for this version. For the latest information, see the
<a href="../current/index.html">current release documentation</a>.
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch Guide [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="rest-apis.html">REST APIs</a></span>
»
<span class="breadcrumb-link"><a href="search.html">Search APIs</a></span>
»
<span class="breadcrumb-node">Multi Search API</span>
</div>
<div class="navheader">
<span class="prev">
<a href="search-suggesters.html">« Suggesters</a>
</span>
<span class="next">
<a href="search-count.html">Count API »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="search-multi-search"></a>Multi Search API<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/search/multi-search.asciidoc">edit</a>
</h2>
</div></div></div>
<p>Executes several searches with a single API request.</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET twitter/_msearch
{ }
{"query" : {"match" : { "message": "this is a test"}}}
{"index": "twitter2"}
{"query" : {"match_all" : {}}}</pre>
</div>
<div class="console_widget" data-snippet="snippets/2028.console"></div>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="search-multi-search-api-request"></a>Request<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/search/multi-search.asciidoc">edit</a>
</h3>
</div></div></div>
<p><code class="literal">GET /&lt;index&gt;/_msearch</code></p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="search-multi-search-api-desc"></a>Description<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/search/multi-search.asciidoc">edit</a>
</h3>
</div></div></div>
<p>The multi search API executes several searches from a single API request.
The format of the request is similar to the bulk API format and makes use
of the newline delimited JSON (NDJSON) format.</p>
<p>The structure is as follows:</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">header\n
body\n
header\n
body\n</pre>
</div>
<p>This structure is specifically optimized to reduce parsing if a specific search
ends up redirected to another node.</p>
<div class="important admon">
<div class="icon"></div>
<div class="admon_content">
<p>The final line of data must end with a newline character <code class="literal">\n</code>. Each newline
character may be preceded by a carriage return <code class="literal">\r</code>. When sending requests to
this endpoint the <code class="literal">Content-Type</code> header should be set to <code class="literal">application/x-ndjson</code>.</p>
</div>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="search-multi-search-api-path-params"></a>Path parameters<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/search/multi-search.asciidoc">edit</a>
</h3>
</div></div></div>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">&lt;index&gt;</code>
</span>
</dt>
<dd>
<p>
(Optional, string) Comma-separated list or wildcard expression of index names
used to limit the request.
</p>
<p>To search all indices, use <code class="literal">_all</code> or omit this parameter.</p>
</dd>
</dl>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="search-multi-search-api-query-params"></a>Query parameters<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/search/multi-search.asciidoc">edit</a>
</h3>
</div></div></div>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">allow_no_indices</code>
</span>
</dt>
<dd>
<p>
(Optional, boolean) If <code class="literal">true</code>,
the request does <span class="strong strong"><strong>not</strong></span> return an error
if a wildcard expression
or <code class="literal">_all</code> value retrieves only missing or closed indices.
</p>
<p>This parameter also applies to <a class="xref" href="indices-aliases.html" title="Update index alias API">index aliases</a>
that point to a missing or closed index.</p>
</dd>
<dt>
<span class="term">
<code class="literal">ccs_minimize_roundtrips</code>
</span>
</dt>
<dd>
(Optional, boolean)
If <code class="literal">true</code>, network roundtrips between the coordinating node and remote clusters
are minimized for cross-cluster search requests. Defaults to <code class="literal">true</code>. See
<a class="xref" href="modules-cross-cluster-search.html#ccs-network-delays" title="How cross-cluster search handles network delays">How cross-cluster search handles network delays</a>.
</dd>
<dt>
<span class="term">
<code class="literal">expand_wildcards</code>
</span>
</dt>
<dd>
<p>(Optional, string) Controls what kind of indices that wildcard expressions can
expand to. Multiple values are accepted when separated by a comma, as in
<code class="literal">open,hidden</code>. Valid values are:</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">all</code>
</span>
</dt>
<dd>
Expand to open and closed indices, including <a class="xref" href="index-modules.html#index-hidden">hidden indices</a>.
</dd>
<dt>
<span class="term">
<code class="literal">open</code>
</span>
</dt>
<dd>
Expand only to open indices.
</dd>
<dt>
<span class="term">
<code class="literal">closed</code>
</span>
</dt>
<dd>
Expand only to closed indices.
</dd>
<dt>
<span class="term">
<code class="literal">hidden</code>
</span>
</dt>
<dd>
Expansion of wildcards will include <a class="xref" href="index-modules.html#index-hidden">hidden indices</a>.
Must be combined with <code class="literal">open</code>, <code class="literal">closed</code>, or both.
</dd>
<dt>
<span class="term">
<code class="literal">none</code>
</span>
</dt>
<dd>
Wildcard expressions are not accepted.
</dd>
</dl>
</div>
<p>Defaults to <code class="literal">open</code>.</p>
</dd>
<dt>
<span class="term">
<code class="literal">ignore_throttled</code>
</span>
</dt>
<dd>
(Optional, boolean)
If <code class="literal">true</code>, concrete, expanded or aliased indices are ignored when throttled.
Defaults to <code class="literal">false</code>.
</dd>
<dt>
<span class="term">
<code class="literal">ignore_unavailable</code>
</span>
</dt>
<dd>
(Optional, boolean) If <code class="literal">true</code>, missing or closed indices are not included in the
response. Defaults to <code class="literal">false</code>.
</dd>
<dt>
<span class="term">
<code class="literal">max_concurrent_searches</code>
</span>
</dt>
<dd>
(Optional, integer)
Maximum number of concurrent searches the multi search API can execute. Defaults
to <code class="literal">max(1, (# of <a class="xref" href="modules-node.html#data-node" title="Data node">data nodes</a> * min(<a class="xref" href="modules-threadpool.html#search-threadpool">search thread pool size</a>, 10)))</code>.
</dd>
<dt>
<span class="term">
<code class="literal">max_concurrent_shard_requests</code>
</span>
</dt>
<dd>
<p>(Optional, integer)
Maximum number of concurrent shard requests that each sub-search request
executes per node.  Defaults to <code class="literal">5</code>.</p>
<p>You can use this parameter to prevent a request from overloading a cluster. For
example, a default request hits all indices in a cluster. This could cause shard
request rejections if the number of shards per node is high.</p>
<p>In certain scenarios, parallelism isn’t achieved through concurrent requests. In
those cases, a low value in this  parameter could result in poor performance.
For example, in an environment where a very low number of concurrent search
requests are expected, a higher value in this parameter may improve performance.</p>
</dd>
<dt>
<span class="term">
<code class="literal">pre_filter_shard_size</code>
</span>
</dt>
<dd>
<p>
(Optional, integer)
Defines a threshold that enforces a pre-filter roundtrip to prefilter search
shards based on query rewriting if the number of shards the search request
expands to exceeds the threshold. This filter roundtrip can limit the number of
shards significantly if for instance a shard can not match any documents based
on its rewrite method i.e., if date filters are mandatory to match but the
shard bounds and the query are disjoint.
When unspecified, the pre-filter phase is executed if any of these
conditions is met:
</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
The request targets more than <code class="literal">128</code> shards.
</li>
<li class="listitem">
The request targets one or more read-only index.
</li>
<li class="listitem">
The primary sort of the query targets an indexed field.
</li>
</ul>
</div>
</dd>
<dt>
<span class="term">
<code class="literal">rest_total_hits_as_int</code>
</span>
</dt>
<dd>
(Optional, boolean)
If <code class="literal">true</code>, <code class="literal">hits.total</code> are returned as an integer in the
response. Defaults to <code class="literal">false</code>, which returns an object.
</dd>
<dt>
<span class="term">
<code class="literal">routing</code>
</span>
</dt>
<dd>
(Optional, string)
Custom <a class="xref" href="mapping-routing-field.html" title="_routing field">routing value</a> used to route search operations
to a specific shard.
</dd>
<dt>
<span class="term">
<code class="literal">search_type</code>
</span>
</dt>
<dd>
<p>(Optional, string)
Indicates whether global term and document frequencies should be used when
scoring returned documents.</p>
<p>Options are:</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">query_then_fetch</code>
</span>
</dt>
<dd>
(default)
Documents are scored using local term and document frequencies for the shard.
This is usually faster but less accurate.
</dd>
<dt>
<span class="term">
<code class="literal">dfs_query_then_fetch</code>
</span>
</dt>
<dd>
Documents are scored using global term and document frequencies across all
shards. This is usually slower but more accurate.
</dd>
</dl>
</div>
</dd>
<dt>
<span class="term">
<code class="literal">typed_keys</code>
</span>
</dt>
<dd>
(Optional, boolean)
Specifies whether aggregation and suggester names should be prefixed by their
respective types in the response.
</dd>
</dl>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="search-multi-search-api-request-body"></a>Request body<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/search/multi-search.asciidoc">edit</a>
</h3>
</div></div></div>
<p>The request body contains a newline-delimited list of search <code class="literal">&lt;header&gt;</code> and
search <code class="literal">&lt;body&gt;</code> objects.</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">&lt;header&gt;</code>
</span>
</dt>
<dd>
<p>(Required, object)
Contains parameters used to limit or change the subsequent search body request.</p>
<p>This object is required for each search body but can be empty (<code class="literal">{}</code>) or a blank
line.</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">allow_no_indices</code>
</span>
</dt>
<dd>
<p>
(Optional, boolean)
If <code class="literal">true</code>, the request does <span class="strong strong"><strong>not</strong></span> return an error if a wildcard expression or
<code class="literal">_all</code> value retrieves only missing or closed indices.
</p>
<p>This parameter also applies to <a class="xref" href="indices-aliases.html" title="Update index alias API">index aliases</a> that point to a
missing or closed index.</p>
</dd>
</dl>
</div>
</dd>
<dt>
<span class="term">
<code class="literal">expand_wildcards</code>
</span>
</dt>
<dd>
<p>(Optional, string) Controls what kind of indices that wildcard expressions can
expand to. Multiple values are accepted when separated by a comma, as in
<code class="literal">open,hidden</code>. Valid values are:</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">all</code>
</span>
</dt>
<dd>
Expand to open and closed indices, including <a class="xref" href="index-modules.html#index-hidden">hidden indices</a>.
</dd>
<dt>
<span class="term">
<code class="literal">open</code>
</span>
</dt>
<dd>
Expand only to open indices.
</dd>
<dt>
<span class="term">
<code class="literal">closed</code>
</span>
</dt>
<dd>
Expand only to closed indices.
</dd>
<dt>
<span class="term">
<code class="literal">hidden</code>
</span>
</dt>
<dd>
Expansion of wildcards will include <a class="xref" href="index-modules.html#index-hidden">hidden indices</a>.
Must be combined with <code class="literal">open</code>, <code class="literal">closed</code>, or both.
</dd>
<dt>
<span class="term">
<code class="literal">none</code>
</span>
</dt>
<dd>
Wildcard expressions are not accepted.
</dd>
</dl>
</div>
<p>Defaults to <code class="literal">open</code>.</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">ignore_unavailable</code>
</span>
</dt>
<dd>
(Optional, boolean) If <code class="literal">true</code>, documents from missing or closed indices are not
included in the response. Defaults to <code class="literal">false</code>.
</dd>
<dt>
<span class="term">
<code class="literal">index</code>
</span>
</dt>
<dd>
(Optional, string or array of strings)
Index name or <a class="xref" href="indices-aliases.html" title="Update index alias API">alias</a> used to limit the request. Wildcard
expressions are supported. You can specify multiple indices as an array.
</dd>
<dt>
<span class="term">
<code class="literal">preference</code>
</span>
</dt>
<dd>
(Optional, string)
Node or shard used to perform the search. Random by default.
</dd>
<dt>
<span class="term">
<code class="literal">request_cache</code>
</span>
</dt>
<dd>
(Optional, boolean)
If <code class="literal">true</code>, the request cache can be used for this search. Defaults to
index-level settings. See <a class="xref" href="shard-request-cache.html" title="Shard request cache settings">Shard request cache settings</a>.
</dd>
<dt>
<span class="term">
<code class="literal">routing</code>
</span>
</dt>
<dd>
(Optional, string)
Custom <a class="xref" href="mapping-routing-field.html" title="_routing field">routing value</a> used to route search operations
to a specific shard.
</dd>
<dt>
<span class="term">
<code class="literal">search_type</code>
</span>
</dt>
<dd>
<p>(Optional, string)
Indicates whether global term and document frequencies should be used when
scoring returned documents.</p>
<p>Options are:</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">query_then_fetch</code>
</span>
</dt>
<dd>
(default)
Documents are scored using local term and document frequencies for the shard.
This is usually faster but less accurate.
</dd>
<dt>
<span class="term">
<code class="literal">dfs_query_then_fetch</code>
</span>
</dt>
<dd>
Documents are scored using global term and document frequencies across all
shards. This is usually slower but more accurate.
</dd>
</dl>
</div>
</dd>
</dl>
</div>
</dd>
<dt>
<span class="term">
<code class="literal">&lt;body&gt;</code>
</span>
</dt>
<dd>
<p>
(Optional, object)
Contains parameters for a search request:
</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">aggregations</code>
</span>
</dt>
<dd>
(Optional, <a class="xref" href="search-aggregations.html#_structuring_aggregations" title="Structuring Aggregations">aggregation object</a>)
Aggregations you wish to run during the search. See <a class="xref" href="search-aggregations.html" title="Aggregations">Aggregations</a>.
</dd>
<dt>
<span class="term">
<code class="literal">query</code>
</span>
</dt>
<dd>
(Optional, <a class="xref" href="query-dsl.html" title="Query DSL">query DSL object</a>) Query you wish to run during the
search. Hits matching this query are returned in the response.
</dd>
<dt>
<span class="term">
<code class="literal">from</code>
</span>
</dt>
<dd>
(Optional, integer)
Starting offset for returned hits. Defaults to <code class="literal">0</code>.
</dd>
<dt>
<span class="term">
<code class="literal">size</code>
</span>
</dt>
<dd>
(Optional, integer)
Number of hits to return. Defaults to <code class="literal">10</code>.
</dd>
</dl>
</div>
</dd>
</dl>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="search-multi-search-api-response-body"></a>Response body<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/search/multi-search.asciidoc">edit</a>
</h3>
</div></div></div>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">responses</code>
</span>
</dt>
<dd>
(array) Includes the search response and status code for each search request
matching its order in the original multi search request. If there was a
complete failure for a specific search request, an object with <code class="literal">error</code> message
and corresponding status code will be returned in place of the actual search
response.
</dd>
</dl>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="search-multi-search-api-example"></a>Examples<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/search/multi-search.asciidoc">edit</a>
</h3>
</div></div></div>
<p>The header part includes which index / indices to search on, the <code class="literal">search_type</code>,
<code class="literal">preference</code>, and <code class="literal">routing</code>. The body includes the typical search body request
(including the <code class="literal">query</code>, <code class="literal">aggregations</code>, <code class="literal">from</code>, <code class="literal">size</code>, and so on).</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">$ cat requests
{"index" : "test"}
{"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
{"index" : "test", "search_type" : "dfs_query_then_fetch"}
{"query" : {"match_all" : {}}}
{}
{"query" : {"match_all" : {}}}

{"query" : {"match_all" : {}}}
{"search_type" : "dfs_query_then_fetch"}
{"query" : {"match_all" : {}}}</pre>
</div>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">$ curl -H "Content-Type: application/x-ndjson" -XGET localhost:9200/_msearch --data-binary "@requests"; echo</pre>
</div>
<p>Note, the above includes an example of an empty header (can also be just
without any content) which is supported as well.</p>
<p>The endpoint allows to also search against an index/indices in the URI itself,
in which case it will be used as the default unless explicitly defined otherwise
in the header. For example:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET twitter/_msearch
{}
{"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
{}
{"query" : {"match_all" : {}}}
{"index" : "twitter2"}
{"query" : {"match_all" : {}}}</pre>
</div>
<div class="console_widget" data-snippet="snippets/2029.console"></div>
<p>The above will execute the search against the <code class="literal">twitter</code> index for all the
requests that don’t define an index, and the last one will be executed
against the <code class="literal">twitter2</code> index.</p>
<p>The <code class="literal">search_type</code> can be set in a similar manner to globally apply to
all search requests.</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="msearch-security"></a>Security<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/search/multi-search.asciidoc">edit</a>
</h3>
</div></div></div>
<p>See <a class="xref" href="url-access-control.html" title="URL-based access control">URL-based access control</a></p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="template-msearch"></a>Template support<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/search/multi-search.asciidoc">edit</a>
</h3>
</div></div></div>
<p>Much like described in <a class="xref" href="search-template.html" title="Search Template">Search Template</a> for the _search resource, _msearch
also provides support for templates. Submit them like follows for inline
templates:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET _msearch/template
{"index" : "twitter"}
{ "source" : "{ \"query\": { \"match\": { \"message\" : \"{{keywords}}\" } } } }", "params": { "query_type": "match", "keywords": "some message" } }
{"index" : "twitter"}
{ "source" : "{ \"query\": { \"match_{{template}}\": {} } }", "params": { "template": "all" } }</pre>
</div>
<div class="console_widget" data-snippet="snippets/2030.console"></div>
<p>You can also create search templates:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /_scripts/my_template_1
{
    "script": {
        "lang": "mustache",
        "source": {
            "query": {
                "match": {
                    "message": "{{query_string}}"
                }
            }
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/2031.console"></div>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /_scripts/my_template_2
{
    "script": {
        "lang": "mustache",
        "source": {
            "query": {
                "term": {
                    "{{field}}": "{{value}}"
                }
            }
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/2032.console"></div>
<p>You can use search templates in a _msearch:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET _msearch/template
{"index" : "main"}
{ "id": "my_template_1", "params": { "query_string": "some message" } }
{"index" : "main"}
{ "id": "my_template_2", "params": { "field": "user", "value": "test" } }</pre>
</div>
<div class="console_widget" data-snippet="snippets/2033.console"></div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="multi-search-partial-responses"></a>Partial responses<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/search/multi-search.asciidoc">edit</a>
</h3>
</div></div></div>
<p>To ensure fast responses, the multi search API will respond with partial results
if one or more shards fail. See <a class="xref" href="docs-replication.html#shard-failures" title="Shard failures">Shard failures</a> for more
information.</p>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="search-suggesters.html">« Suggesters</a>
</span>
<span class="next">
<a href="search-count.html">Count API »</a>
</span>
</div>
</div>

                  <!-- end body -->
                </div>
                <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                  <div id="rtpcontainer" style="display: block;">
                    <div class="mktg-promo">
                      <h3>Most Popular</h3>
                      <ul class="icons">
                        <li class="icon-elasticsearch-white"><a href="https://www.elastic.co/webinars/getting-started-elasticsearch?baymax=default&amp;elektra=docs&amp;storm=top-video">Get Started with Elasticsearch: Video</a></li>
                        <li class="icon-kibana-white"><a href="https://www.elastic.co/webinars/getting-started-kibana?baymax=default&amp;elektra=docs&amp;storm=top-video">Intro to Kibana: Video</a></li>
                        <li class="icon-logstash-white"><a href="https://www.elastic.co/webinars/introduction-elk-stack?baymax=default&amp;elektra=docs&amp;storm=top-video">ELK for Logs &amp; Metrics: Video</a></li>
                      </ul>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </section>

        </div>


<div id="elastic-footer"></div>
<script src="https://www.elastic.co/elastic-footer.js"></script>
<!-- Footer Section end-->

      </section>
    </div>

<script src="/guide/static/jquery.js"></script>
<script type="text/javascript" src="/guide/static/docs.js"></script>
<script type="text/javascript">
  window.initial_state = {}</script>
  </body>
</html>
